package main

import (
	"bufio"
	"fmt"
	"net"
)

func process(conn net.Conn) {
	defer conn.Close()
	for {
		reader := bufio.NewReader(conn)
		var buf = make([]byte, 128)
		n, err := reader.Read(buf) //读取数据，经过测试，这里会阻塞，等待数据
		if err != nil {
			fmt.Println(err)
			break
		}
		recvStr := string(buf[:n])
		fmt.Println("收到客户端发来的数据：", recvStr)
		conn.Write(buf[:n])
	}
}

func main() {
	//1.创建监听端口
	addr := "127.0.0.1:8080"
	listen, err := net.Listen("tcp", addr)
	fmt.Println(addr, "服务端已经打开.....")
	defer listen.Close()
	if err != nil {
		panic(err)
	}
	//2.接收建立连接
	for {
		conn, err := listen.Accept() //监听的时候按理来说会阻塞
		if err != nil {
			fmt.Println("accept err:", err)
			continue //继续监听
		}
		//3.处理连接
		//收到监听 开一个线程来处理
		go process(conn)
	}

}
